import fs from 'fs';
import path from 'path';

function listAllFiles(dirPath, includeEmptyDirs = false) {
    let results = [];

    try {
        const items = fs.readdirSync(dirPath, { withFileTypes: true });

        // 如果目录为空且需要包含空目录，则直接添加当前目录路径
        if (items.length === 0 && includeEmptyDirs) {
            results.push(dirPath);
        }

        items.forEach(item => {
            const fullPath = path.join(dirPath, item.name);
            try {
                if (item.isDirectory()) {
                    // 对于每个子目录，递归调用来处理文件夹内部
                    const subDirFiles = listAllFiles(fullPath, includeEmptyDirs);
                    if (includeEmptyDirs && subDirFiles.length === 0) {
                        // 如果子目录为空，并且决定包含空目录，子目录路径已经在递归调用中被添加
                        // 这里不做任何操作，避免重复添加
                    } else {
                        // 如果子目录不为空，递归结果已经包含所有子文件和子目录路径
                        results = results.concat(subDirFiles);
                    }
                } else {
                    // 如果是文件，则添加到结果数组中
                    results.push(fullPath);
                }
            } catch (err) {
                console.error(`Error accessing ${fullPath}: ${err}`);
            }
        });
    } catch (err) {
        console.error(`Error reading directory ${dirPath}: ${err}`);
    }

    return results;
}

try {
    const fileList = listAllFiles('./', true); // 第二个参数设置为true以包含空文件夹的路径
    console.log(fileList);
} catch (err) {
    console.error(`Error listing files: ${err}`);
}